package com.kaifa.org.tp05.example01.dao.impl;

import com.kaifa.org.tp05.example01.dao.UserDao;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * @Transactional注解与jdbc.xml中<tx:advice></tx:advice>具有相同的功能
 * @Transactional可以标注接口、接口实现类、类或者类方法上
 * @Transactional如果标注在类的上面，该类中所有的public方法都将具有同样功能的事务属性
 * @Transactional如果标注在类中方法上，该类也标注了此注解，那么类中的方法上注解会屏蔽类的注解
 */
@Transactional
public class UserDaoImpl implements UserDao {
    private JdbcTemplate jdbcTemplate4;
    public void setJdbcTemplate4(JdbcTemplate jdbcTemplate4) {
        this.jdbcTemplate4 = jdbcTemplate4;
    }

    @Transactional(propagation = Propagation.REQUIRED,readOnly = false,isolation = Isolation.DEFAULT)
    public void transfer(int iId, int oId, double money) {
//        借款人
        String sql="update t_user set money=money-? where id=?";
        jdbcTemplate4.update(sql,money,oId);
//        模拟服务器故障
        int i=2/0;
//        收款人
        String sql2="update t_user set money=money+? where id=?";
        jdbcTemplate4.update(sql2,money,iId);
    }
}
